package com.ttg.web.dao;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ttg.common.dto.TagProducer;
import com.ttg.common.entities.BasePage;
import com.ttg.model.dto.VipGetInfoListDto;
import com.ttg.model.dto.VipTagDto;
import com.ttg.model.dto.VipUpdataDto;
import com.ttg.model.dto.open.QueryVipGradeByCustomerDto;
import com.ttg.model.dto.open.QueryVipGradeByIdCardDto;
import com.ttg.model.dto.open.QueryVipTagByCustomerNoDto;
import com.ttg.model.dto.open.QueryVipTagByIdCardDto;
import com.ttg.model.pojo.BankPrivatePrimitive;
import com.ttg.model.pojo.VipInfo;
import com.ttg.model.vo.VipGetInfoListVo;
import com.ttg.model.vo.VipInfoGetListVo;
import com.ttg.model.vo.VipTagVo;
import com.ttg.model.vo.open.QueryVipGradeByCustomerNoVo;
import com.ttg.model.vo.open.QueryVipGradeByIdCardVo;
import com.ttg.model.vo.open.QueryVipTagInfoVo;
import com.ttg.model.vo.open.VipInfoVo;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;


/**
 * @author zhangHongYuan
 * @description
 * @date 2023/6/8 11:19
 */
public interface VipInfoDao extends IService<VipInfo> {
    BasePage<VipInfoGetListVo> getList(BasePage<VipInfoGetListVo> page, Long vipId, String vipMobile, String name, Double grade, Integer status, LocalDate startTime, LocalDate endTime);


    VipInfo openGetByCrdIdNo(String crdIdNo);

    List<VipInfo> allByStatus();

    List<VipInfo> QueryByIdsAndStatus(List<Long> ids);

    List<VipInfo> QueryByTimes(LocalDate localDate);

    QueryVipTagInfoVo queryVipTagByPrivate(String idCardNo,Integer type);

    VipInfo getByCstId(String cstId);

    BasePage<VipInfo> getAllByPage(BasePage basePage);

    VipInfo getByCstIdSelectId(String cstId);

    Map<String, Long> existsMapByCtsId(List<String> existsWhere);


    List<VipInfo> getByIds(List<String> vipCstIds);

    List<Long> getVipIdsByTags(List<TagProducer> tags, String key);

    List<QueryVipGradeByIdCardVo> queryVipGradeByIdCard(List<QueryVipGradeByIdCardDto> dtos, Integer typePrivate);

    List<QueryVipTagInfoVo> queryVipTagByIdCard(List<QueryVipTagByIdCardDto> idCardListDto, Integer typePrivate);


//    void updateGrowByTaskIdAndDate(Long taskId, Integer nowDate, LocalDateTime nowTime);
//
//    void LoadGrowBackUp();

    void sumTodayIntegral(Integer excuteDate);

    Map<String, Long> existsMapByCtsScId(List<String> existsWhere);

    List<QueryVipGradeByCustomerNoVo> queryVipGradeByCustomerNo(List<QueryVipGradeByCustomerDto> customerNos, Integer typePrivate);

    List<QueryVipTagInfoVo> queryVipTagByCustomerNo(List<QueryVipTagByCustomerNoDto> customerNos, Integer value);

    VipInfo getLastVipId();

    void rattingGradeByBatch(Long idStart, Long idEnd);

    boolean newVipRating();

    List<VipInfo> tblGxdAppCouponVip(Integer pageSize, Long starId);

    BasePage<VipGetInfoListVo> getInfoList(BasePage<VipGetInfoListVo> page, Long vipId, String vipMobile, Integer vipStatus, List<Long> vipIds);

    boolean updateVipStatus(VipUpdataDto dto);

    VipTagVo getVipTag(VipTagDto dto);

    VipInfoVo getSycnVip(Long vipId);
}
